// utils/api.js
const app = getApp()
const { mockService } = require('./mock.js')
const { getCurrentConfig } = require('../config/env.js')

// 获取当前环境配置
const envConfig = getCurrentConfig()

// API基础配置
const API_CONFIG = {
  baseUrl: envConfig.API_BASE_URL || 'https://noncovetously-supervisual-mandie.ngrok-free.dev',
  timeout: 10000,
  mockMode: envConfig.MOCK_MODE !== undefined ? envConfig.MOCK_MODE : true // 从环境配置读取
}

// 请求封装
const request = (options) => {
  // 如果启用Mock模式，使用Mock服务
  if (API_CONFIG.mockMode) {
    return mockService.request(API_CONFIG.baseUrl + options.url, {
      method: options.method || 'GET',
      data: options.data || {},
      header: options.header || {}
    })
  }

  // 真实API请求
  return new Promise((resolve, reject) => {
    const token = wx.getStorageSync('token')
    
    wx.request({
      url: API_CONFIG.baseUrl + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': 'application/json',
        'Authorization': token || '', // 直接使用 token,后端已包含 Bearer 前缀
        ...options.header
      },
      timeout: options.timeout || API_CONFIG.timeout,
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data)
        } else {
          reject(new Error(`请求失败: ${res.statusCode}`))
        }
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}

// API接口定义
const api = {
  // 用户相关
  user: {
    // 登录
    login: (data) => request({
      url: '/user/login',
      method: 'POST',
      data
    }),
    
    // 微信登录
    wechatLogin: (code) => request({
      url: '/user/wechat/login/auth',
      method: 'GET',
      data: { code }
    }),
    
    // 获取当前登录用户信息(个人资料)
    getProfile: () => request({
      url: '/user/wechat/login/profile',
      method: 'GET'
    }),
    
    // 修改当前登录用户信息(个人资料)
    updateProfile: (data) => request({
      url: '/user/wechat/login/profile',
      method: 'PUT',
      data
    }),
    
    // 获取用户信息
    getUserInfo: () => request({
      url: '/user/info'
    }),
    
    // 更新用户信息
    updateUserInfo: (data) => request({
      url: '/user/info',
      method: 'PUT',
      data
    }),
    
    // 发送验证码
    sendCode: (phone) => request({
      url: '/user/send-code',
      method: 'POST',
      data: { phone }
    })
  },

  // 视频相关
  video: {
    // 获取视频列表
    getVideoList: (params) => request({
      url: '/video/list',
      data: params
    }),
    
    // 获取视频详情
    getVideoDetail: (id) => request({
      url: `/video/${id}`
    }),
    
    // 上传视频
    uploadVideo: (data) => request({
      url: '/video/upload',
      method: 'POST',
      data
    }),
    
    // 收藏视频
    collectVideo: (id) => request({
      url: `/video/${id}/collect`,
      method: 'POST'
    }),
    
    // 取消收藏
    uncollectVideo: (id) => request({
      url: `/video/${id}/collect`,
      method: 'DELETE'
    })
  },

  // 社区相关
  community: {
    // 获取话题列表
    getTopicList: () => request({
      url: '/user/topic/all'
    }),

    // 获取动态列表（滑动查询）
    getPostList: (params) => request({
      url: '/user/post/list',
      data: params
    }),

    // 根据话题ID获取动态列表（滑动查询）
    getPostsByTopicId: (topicId, params) => request({
      url: `/user/post/topic/${topicId}`,
      data: params
    }),
    
    // 获取动态详情
    getPostDetail: (id) => request({
      url: `/user/post/${id}`
    }),

    // 增加浏览量
    incrementViewCount: (id) => request({
      url: `/user/post/view/${id}`,
      method: 'POST'
    }),
    
    // 发布动态（旧接口）
    publishPost: (data) => request({
      url: '/user/post/publish',
      method: 'POST',
      data
    }),
    
    // 创建动态（带话题）
    createPost: (data) => request({
      url: '/user/post/with-topics',
      method: 'POST',
      data
    }),
    
    // 上传动态图片
    uploadPostImages: (filePaths) => {
      // 返回 Promise，处理多张图片上传
      return new Promise((resolve, reject) => {
        const uploadPromises = filePaths.map(filePath => {
          return new Promise((resolveUpload, rejectUpload) => {
            wx.uploadFile({
              url: `${API_CONFIG.baseUrl}/user/post/upload-image`,
              filePath: filePath,
              name: 'file',
              header: {
                'Authorization': wx.getStorageSync('token') || ''
              },
              success: (res) => {
                try {
                  const data = JSON.parse(res.data);
                  if (data.code === 200) {
                    // 返回 url 数组中的第一个（每次上传一张图片）
                    resolveUpload(data.data.url[0]);
                  } else {
                    rejectUpload(new Error(data.msg || '上传失败'));
                  }
                } catch (e) {
                  rejectUpload(e);
                }
              },
              fail: (err) => {
                rejectUpload(err);
              }
            });
          });
        });

        // 等待所有图片上传完成
        Promise.all(uploadPromises)
          .then(urls => resolve(urls))
          .catch(err => reject(err));
      });
    },
    
    // 点赞动态（占位 - 等待后端实现）
    likePost: (data) => request({
      url: `/user/post/like`,
      method: 'POST',
      data
    }),
    
    // 取消点赞（占位 - 等待后端实现）
    unlikePost: (data) => request({
      url: `/user/post/unlike`,
      method: 'POST',
      data
    }),

    // 收藏动态（占位 - 等待后端实现）
    collectPost: (data) => request({
      url: `/user/post/collect`,
      method: 'POST',
      data
    }),

    // 取消收藏（占位 - 等待后端实现）
    uncollectPost: (data) => request({
      url: `/user/post/uncollect`,
      method: 'POST',
      data
    }),

    // 获取评论列表（占位 - 等待后端实现）
    getPostComments: (params) => request({
      url: '/user/post/comment/list',
      data: params
    }),

    // 添加评论（占位 - 等待后端实现）
    addPostComment: (data) => request({
      url: '/user/post/comment/add',
      method: 'POST',
      data
    }),

    // 点赞评论（占位 - 等待后端实现）
    likeComment: (data) => request({
      url: '/user/post/comment/like',
      method: 'POST',
      data
    }),

    // 取消点赞评论（占位 - 等待后端实现）
    unlikeComment: (data) => request({
      url: '/user/post/comment/unlike',
      method: 'POST',
      data
    }),

    // 删除评论（占位 - 等待后端实现）
    deleteComment: (data) => request({
      url: '/user/post/comment/delete',
      method: 'POST',
      data
    }),
    
    // 关注用户
    followUser: (id) => request({
      url: `/user/${id}/follow`,
      method: 'POST'
    }),
    
    // 取消关注
    unfollowUser: (id) => request({
      url: `/user/${id}/follow`,
      method: 'DELETE'
    })
  },

  // 评论相关
  comment: {
    // 获取评论列表
    getCommentList: (params) => request({
      url: '/comment/list',
      data: params
    }),
    
    // 发表评论
    addComment: (data) => request({
      url: '/comment/add',
      method: 'POST',
      data
    }),
    
    // 点赞评论
    likeComment: (id) => request({
      url: `/comment/${id}/like`,
      method: 'POST'
    })
  },

  // 管理员相关
  admin: {
    // 获取概览数据
    getOverview: () => request({
      url: '/admin/overview'
    }),
    
    // 获取用户列表
    getUserList: (params) => request({
      url: '/admin/users',
      data: params
    }),
    
    // 获取待审核内容
    getPendingList: (params) => request({
      url: '/admin/pending',
      data: params
    }),
    
    // 审核内容
    approveContent: (id, status) => request({
      url: `/admin/approve/${id}`,
      method: 'POST',
      data: { status }
    })
  }
}

// 导出 API 基础地址（供 wx.uploadFile 等使用）
const getBaseUrl = () => API_CONFIG.baseUrl

module.exports = {
  request,
  api,
  getBaseUrl
}
